#include<iostream>
#include<signal.h>
static int i=0;
void Printpend(sigset_t pending)
{
    for(int i=31;i>0;i--)
    {
        if(sigismember(&pending,i)==1)
        {
            std::cout<<"1 ";
        }
        else
        {
            std::cout<<"0 ";
        }
    }
    std::cout<<"["<<i<<" s]"<<std::endl;
    i++;
}

void handler(int sign)
{
    std::cout<<sign<<" 号信号被递达 "<<std::endl;
}
int main()
{
    std::cout<<getpid()<<"号进程处理过程"<<std::endl;
    //首先将2号信号进行自定义捕捉：
    signal(2,handler);
    //将2号信号进行屏蔽（阻塞）
    sigset_t old,block;
    sigemptyset(&old);
    sigemptyset(&block);
    sigaddset(&block,2);
    sigprocmask(SIG_SETMASK,&block,&old);
    //在15秒内打印pending信号集，15秒后解除阻塞递达信号
    int cnt=15;
    while(1)
    {
        //获取当前的pending信号集：
        sigset_t pending;
        sigemptyset(&pending);
        sigpending(&pending);
        //打印当前获取的pending:
        Printpend(pending);
        cnt--;

        if(cnt==0)
        {
            //解除对2号信号的屏蔽（阻塞）：
            sigprocmask(SIG_SETMASK,&old,&block);
        }
        sleep(1);
    }
    return 0;
}